package leetcode331周赛;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/2/5 13:39
 */
public class leetcode6347 {


    /*
     前缀和 666
     只不过 叙述的 有点 复杂 ，其实 这就是 前缀和
     思想！
     这还真的是 没想到！
     不过 这个前缀和的  形式 并不是传统的 那种 前缀和 形式！

     数据量 一大起来 ，就显得 很复杂 似的
     */

    public int[] solutionFinal(String words[],int [][]queries){
        String s = "aeiou";
        int preSum[] = new int[words.length + 1],ans[] = new int[queries.length];
        for(int i = 0;i < words.length;i++){
            preSum[i + 1] = preSum[i] + ((s.contains(words[i].charAt(0) + "") && s.contains(words[i].charAt(words[i].length() - 1) +
                    "")) ? 1 : 0);
        }
        for(int i = 0;i < queries.length;i++){
            ans[i] = preSum[queries[i][1] + 1] - preSum[queries[i][0]];
        }
        return ans;
    }






    // TLE
    public int[] solution(String words[],int queries[][]){
        String s = "aeiou";
        int ans[] = new int[queries.length];
//        int map[][][] = new int[queries.length][queries.length][1];
        for(int i = 0;i < queries.length;i++){
            int count = 0;
            for(int start = queries[i][0],end = queries[i][1];start <= end; start++){
                if(s.contains(words[start].charAt(0) + "") && s.contains(words[start].charAt(words[start].length() - 1) + "")){
                    count++;
                }
            }
            ans[i] = count;
        }
        return ans;
    }
    /*
     想到的 一个优化的 点：
     就是  这么 多次 queries 中， 可能存在查询 相同的 区间，
     所以 对这个 相同的 区间， 进行 一个 缓存，这他妈 想想， 也 不是 一个 很好的 解决方式
     */
    class  Pair{
        /*
            这里 主要 想表达的 一个点就是：
        map[i][j][count] 表示 i ~ j 范围内 满足的条件的 元素的 count (其实 就是 求 i ~ j 内的 sum (不过 是 加 了 一些 限制条件))
        如果 使用数组 的 话, 内存 消耗 就非常的大, 而且 还需要 进行 初始化 数组的 值
        ==
        所以 这里 想采用 Map 来解决, 但是这 又是 个 三元组 ,用 map 也不好 存储的
        所以 把 i,j 当作 一个 pair 对,作为 Map 的 key
        == 而这里 就需要 思考 怎么 去 重写 Pair 的 hashcode() and equals() 方法
        还是 hashMap的 一个原理 知识

         */
    }

}
